package com.ynet.middleground.approve.service;

import java.util.List;

import javax.validation.Valid;

import com.ynet.core.common.ServiceResult;
import com.ynet.middleground.approve.bean.ActivateProcessReq;
import com.ynet.middleground.approve.bean.DeleteProcessReq;
import com.ynet.middleground.approve.bean.DeployProcessReq;
import com.ynet.middleground.approve.bean.QueryProcessReqPager;
import com.ynet.middleground.approve.dto.ProcessDefinitionDTO;

/**
 * @author liulx
 * @description 流程定义接口服务类
 * @date 2019/10/11 14:05
 */
public interface ProcessDefinitionService {

    /**
     * 部署流程 bpmn和png 压缩后的zip文件
     *
     * @param deployProcessReq
     *            部署工作流规则文件对象: {文件流字节}
     * @return 部署ID
     */
    ServiceResult<String> saveProcess(@Valid DeployProcessReq deployProcessReq);

    /**
     * 根据流程部署ID删除流程
     *
     * @param deleteProcessReq
     *            删除流程定义请求对象: {流程部署ID, 级联删除标志}
     * @return 删除结果标志，以success 字段值标识 true/false
     */
    ServiceResult removeProcessByDeploymentId(@Valid DeleteProcessReq deleteProcessReq);

    /**
     * 分页查询流程定义列表
     *
     * @param reqPager
     *            查询流程对象：{分页对象,流程名称}
     * @return 流程定义列表
     */
    ServiceResult<List<ProcessDefinitionDTO>> listProcessByPage(@Valid QueryProcessReqPager reqPager);

    /**
     * 挂起或激活指定流程定义的所有实例
     *
     * @param processReq
     *            激活或挂起流程定义请求对象: {流程定义id, 激活挂起标志}
     * @return 挂起或激活标志，以 success 字段值标识 true/false
     */
    ServiceResult suspendOrActivateProcessDefinition(@Valid ActivateProcessReq processReq);
}
